<template>
	<view class="page-index">
		<view class="bar-area">
			<view class="fc-white fs30" @click="loginOut" :style="showQuitBtn?'':'visibility: hidden;'">退出</view>
			<view class="flex-row" @click="areaChange">
                <view class="fc-white fs35">配药</view>
            </view>
			<view class="fc-white fs30">{{ loginUser && loginUser.YHXM }}</view>
		</view>
		<view class="scan-tips"> 请扫描输液贴 </view>

		<!-- <view style="position:absolute;top:0rpx;left:100rpx;">
			<view @click="scanTest(testIdMedordipex)">扫描测试</view>
			<input type="text" v-model="testIdMedordipex" placeholder="请输入医嘱计划号">
		</view> -->
		


		<scroll-view
			class="scroll-view"
			scroll-y="auto"
			:refresher-enabled="false"
			@refresherrefresh="onPullRefresh"
			@scrolltolower="onReachBottomDistance"
			:refresher-triggered="isRefresherTriggered"
		>
			<view>
				<view
					class="item-area"
					v-for="(item, index) in listData"
					:key="index"
				>
					<view class="item-title">
						<view class="item-brch">{{ nowPatient.brch }}</view>
						<view class="item-line"></view>
						<view class="item-body">
							<view class="item-body-top">
								<view class="fs30 fb nowrap">{{ nowPatient.brxm }}</view>
								<u--image
									class="ml10"
									width="20"
									height="20"
									:src="nowPatient.brxbDm == 1
											? '/static/man.svg'
											: '/static/female.svg'
									"
								></u--image>
								<view class="fs30 fc-sub ml10 nowrap">{{nowPatient.brnl}}</view>
								<view class="fs30 fc-sub ml10 nowrap">{{nowPatient.mzhm}}</view>
							</view>
						</view>
						<view class="item-check-status">
							<view class="item-check-no" v-show="!item.fgRecheck">
								<u--image width="16" height="16" src="/static/check/warning.svg" ></u--image>
								未核对
							</view>
							<view class="item-check-yes" v-show="item.fgRecheck">
								<u--image width="16" height="16" src="/static/check/success.svg" ></u--image>
								已核对
							</view>
						</view>
					</view>
					<!-- 医嘱区域 -->
					<view class="item-content">
						<view class="item-content-icon">{{item.adviceType}}</view>
						<view class="item-content-list">
							<view class="list-item" v-for="(drug,drugIndex) in item.drugList" :key="drugIndex">
								<view class="item-name">{{drug.naSrvMed}} {{drug.spec}}</view>
								<view class="item-amount">{{drug.ycjl}}{{drug.jldw}}</view>
								<view class="item-freq">{{drug.pcbm}}</view>
							</view>
						</view>
					</view>
					<!-- 核对时间 -->
					<view class="check-datetime" v-if="item.dtRecheck">
						核对时间：{{item.dtRecheck}}
					</view>
					<view class="check-datetime" v-if="!item.dtRecheck">
						计划时间：{{item.dtMedordsrvex}}
					</view>
				</view>
				<u-empty
					:show="!(listData && listData.length > 0)"
					marginTop="300"
				></u-empty>
			</view>
		</scroll-view>
	</view>
</template>

<script>
import { mapState } from "vuex"
import { logout } from "@/api/utils.js"
import { 
	getDateTimeString,
	getAdviceType,
	showToast,
} from "@/static/js/common.js"

export default {
	components: {},
	props: {
		showQuitBtn: {
			type: Boolean,
			default:function () {
				return true
			}
		},
	},
	data() {
		return {
			isRefresherTriggered: false,
			originListData:[],//医嘱接口返回的原始数据
			listData: [],// 医嘱计划处理后的数据
			nowPatient:{},
			nowIdVismed:'',//当前患者的就诊流程号
			nowIdMedord:'',//当前扫描出来的组号
			nowIdMedordipex:'',//当前扫描出来的医嘱计划id
			
			testIdMedordipex:'',//
		}
	},
	watch: {
		
	},
	computed: {
		...mapState(["loginUser", "area"]),
		
	},
	beforeDestroy(){
		uni.$off('scanCodeEmit');//取消监听
	},
	mounted() {
		// 接收原生扫描传值
		uni.$on("scanCodeEmit", async (res) => {
			console.log("核对扫描内容：", res)
			// uni.$emit("scanCodeEmit", res)

			if (res.indexOf("嘱") != -1) {
				//是输液（医嘱）贴
				let idMedordipex = res.split(":")[1] // 获取到输液贴二维码上的id,也就是医嘱计划号
				// let patientRes = await this.getPatientByIdMedordipex(idMedordipex);//获取输液贴对应的病人信息
				// this.nowPatient = patientRes.res.Data[0];
				// console.log('病人：',this.nowPatient);
				this.nowIdMedordipex = idMedordipex;
				
				let planRes = await this.getPlanByIdMedordipex(this.nowIdMedordipex);
				console.log('医嘱计划：',planRes);
				if(planRes.res.ReType == 0){//请求成功
					if(planRes.res.Data.length > 0){
						if(planRes.res.Data[0].hihisAdvicePlanBeanList[0].fgRecheck == '1'){//已核对
							showToast(-1,'医嘱已核对');
						}else{
							this.handleScanCheck(planRes.res.Data[0]);
						}
					}else{
						showToast(-1,'未找到医嘱计划');
					}
				}else{//请求失败
					showToast(planRes.res.ReType,planRes.res.Msg)
				}
			}
		})

		console.log("当前登陆人信息：", this.loginUser)
	},
	methods: {
		/**
		 * 扫描测试
		 * idMedord 医嘱组号
		 */
		async scanTest(idMedordipex) {
			console.log('医嘱计划号：',idMedordipex);
			// let patientRes = await this.getPatientByIdMedordipex(idMedordipex);//获取输液贴对应的病人信息
			// this.nowPatient = patientRes.res.Data[0];
			// console.log('病人：',this.nowPatient);
			this.nowIdMedordipex = idMedordipex;
			
			let planRes = await this.getPlanByIdMedordipex(this.nowIdMedordipex);
			console.log('医嘱计划：',planRes);
			if(planRes.res.ReType == 0){//请求成功
				if(planRes.res.Data.length > 0){
					if(planRes.res.Data[0].hihisAdvicePlanBeanList[0].fgRecheck == '1'){//已核对
						showToast(-1,'医嘱已核对');
					}else{
						this.handleScanCheck(planRes.res.Data[0]);
					}
				}else{
					showToast(-1,'未找到医嘱计划');
				}
			}else{//请求失败
				showToast(planRes.res.ReType,planRes.res.Msg)
			}
		},
		/**
		 * 处理医嘱计划数据
		 * isComplete 医嘱是否核对
		 */
		handlePlanList(listData,isComplete){
			console.log('处理前的医嘱计划列表：',listData)
			let planList = [];
			listData.forEach(el=>{
				let obj = {
					idMedordipex:el.idMedordipex,
					fgRecheck:el.hihisAdvicePlanBeanList[0].fgRecheck?true:false,//核对状态
					dtRecheck:el.hihisAdvicePlanBeanList[0].dtRecheck,//核对时间
					dtMedordsrvex:el.hihisAdvicePlanBeanList[0].dtMedordsrvex,//计划时间
					adviceType:getAdviceType(el.hihisAdvicePlanBeanList[0].sdSrvtpCd),
					drugList:el.hihisAdvicePlanBeanList,//药品医嘱列表
				}
				if(isComplete){//医嘱已核对
					obj.fgRecheck = true;
				}
				planList.push(obj);
			})
			console.log('处理后的医嘱计划列表：',listData)
			return planList;
		},

		//根据医嘱计划号获取医嘱计划
		getPlanByIdMedordipex(id){
			let params = {
				idMedord: null, //string 输液贴id - 对应pc端医嘱执行模块的医嘱组号
				adviceServiceType: 1, //number 1：核对模块 2 配药模块 3 执行 4：皮试执行
				jgid: this.loginUser.JZJGID, //短机构id
				ksid: this.loginUser.KSID, //科室id
				orgId: this.loginUser.JGID, //长机构id
				yhdm: this.loginUser.YHDM, //用户代码
				beginTime: null, //开始时间
				endTime: null, //结束时间
				idMedordipex: id, //执行计划id
				// idVismed: this.nowPatient.hisJzxh, //就诊流程号|his就诊序号 ,
				idVismed: null, //就诊流程号|his就诊序号 ,
				isShowST: 1, //是否展示皮试医嘱控制 0 否 1 是 ,
				isOnlyST: 0, //是否只展示皮试医嘱
				jzfq: null, //急诊分区
				jzlc: 112, //就诊流程 默认值112 急诊 ,
				uid: this.loginUser.YHID, //当前登录人id ,
				yzlx: 1, //医嘱类型  1开头：药品| 21开头： 检查| 22开头： 检验 |23开头： 手术 |24 开头：治疗 |25开头： 护理 |26开头： 嘱托 |27开头： 诊疗 ,
				yzqx: null, //医嘱期效益 ,
				yzzt: null, //1:已核对 2 已配药 3 已执行 4 未执行(未核对|未配药|未执行)
			}
			return this.$commonAjax(
				"auth/mobile/advice/get/GetPlanList",
				params
			)
		},

		/**
		 * 核对医嘱
		 * planList 医嘱计划组
		 */
		async handleScanCheck(plan) {
			let planList = plan.hihisAdvicePlanBeanList;
			console.log('核对数据入参：',planList);
			let list = [];
			let date = new Date();
			planList.forEach(el=>{
				list.push({
					dtRecheck: getDateTimeString(date),//核对时间
					idMedord: el.idMedord,
					idMedordipex: el.idMedordipex,
					idRecheckper: this.loginUser.YHID,
				})
			})
			let params={
				fgRecheck: '1',
				recheckOpPlanCOList: list,
			}
			return this.$commonAjax(
				"auth/mobile/advicecheck/ScanEcisAdviceCheck",
				params
			).then(res=>{
				if(res.res.ReType == 0){
					showToast(res.res.ReType,res.res.Msg);
					// setTimeout(()=>{ // 此处延迟1500ms是因为列表loading会覆盖uni.showToast，所以先让uni.showToast显示1500ms，再刷新列表
					// 	this.getPlanListByIdVismed(this.nowIdVismed);//刷新列表
					// },1500);
					let newInsertPlan = this.handlePlanList([plan],true);
					this.listData.push(newInsertPlan[0]);
				}else{
					showToast(res.res.ReType,res.res.Msg);
				}
			})
		},
		
		/**
		 * 根据医嘱组号获取 患者信息
		 * idMedord 医嘱组号
		 */
		getPatientByIdMedordipex(id){
			let params = {
				orgId: this.loginUser?.JGID,
				jzlx: null,
				lspb: 0,
				yhdm: this.loginUser?.YHDM,
				type: 1, //：病人列表   2：我的关注
				// hisJzxh: idVismed,
				// idMedord:idMedord,
				idMedordipex:id,
			};
			return this.$commonAjax(
				"auth/mobile/patient/get/getPatientList",
				params
			)
		},

		/**
		 * 根据 就诊流程号 获取病人所有医嘱
		 * idVismed 病人就诊流程号
		 */
		getPlanListByIdVismed(idVismed) {
			let params = {
				idMedord: null, //string 输液贴id - 对应pc端医嘱执行模块的医嘱组号
				adviceServiceType: 1, //number 1：核对模块 2 配药模块 3 执行 4：皮试执行
				jgid: this.loginUser.JZJGID, //短机构id
				ksid: this.loginUser.KSID, //科室id
				orgId: this.loginUser.JGID, //长机构id
				yhdm: this.loginUser.YHDM, //用户代码
				beginTime: null, //开始时间
				endTime: null, //结束时间
				idMedordipex: null, //执行计划id
				idVismed: idVismed, //就诊流程号|his就诊序号 ,
				isShowST: 1, //是否展示皮试医嘱控制 0 否 1 是 ,
				isOnlyST: 0, //是否只展示皮试医嘱
				jzfq: null, //急诊分区
				jzlc: 112, //就诊流程 默认值112 急诊 ,
				uid: this.loginUser.YHID, //当前登录人id ,
				yzlx: 1, //医嘱类型  1开头：药品| 21开头： 检查| 22开头： 检验 |23开头： 手术 |24 开头：治疗 |25开头： 护理 |26开头： 嘱托 |27开头： 诊疗 ,
				yzqx: null, //医嘱期效益 ,
				yzzt: 4, //1:已核对 2 已配药 3 已执行 4 未执行(未核对|未配药|未执行)
			}

			return this.$commonAjax(
				"auth/mobile/advice/get/GetPlanList",
				params
			).then(res=>{
				console.log(11111111,res);
				this.originListData = res.res.Data;
				this.listData = this.handlePlanList(res.res.Data);//医嘱处理
				this.isRefresherTriggered = false;
			})
		},

		loginOut() {
			logout()
		},
		onPullRefresh() {
			if (this.isRefresherTriggered) {
				return
			}
			this.isRefresherTriggered = true
			this.getPlanListByIdVismed(this.nowIdVismed);
		},
		onReachBottomDistance() {
			console.log(1111)
		},
		
		/**
		 * 获取医嘱组核对状态
		 */
		getRecheckStatus(item){
			if(item[0].fgRecheck){
				return true;
			}
			return false;
		},
	},
}
</script>

<style lang="scss">
.scan-tips {
	text-align: center;
	background-color: #faefe4;
	font-size: 30rpx;
	color: #ff9a27;
	padding: 10rpx 0rpx;
}
.bar-area {
	height: 100rpx;
	background-color: $bs-color-primary;
	display: flex;
	flex-direction: row;
	align-items: center;
	font-size: 30rpx;
	justify-content: space-between;
	padding: 0 30rpx;
}
.scroll-view {
	width: 100%;
	height: calc(100% - 200rpx);
	background-color: #f3f5f7;
	padding-bottom: 20rpx;
}
.item-area {
	margin: 20rpx 20rpx 0 20rpx;
	background-color: #ffff;
	border-radius: 10rpx;
	padding: 10rpx;
}
.item-title {
	padding: 6rpx 10rpx 12rpx 10rpx;
	display: flex;
	border-bottom: 1px solid #ebeef5;
}
.item-line {
	width: 1rpx;
	background-color: #d6d7d9;
	height: 46rpx;
	width: 2rpx;
}

.item-body {
	display: flex;
	flex-direction: column;
	justify-content: center;
	padding: 0 10rpx;
}
.item-body-top {
	display: flex;
	flex-direction: row;
	align-items: center;
	margin-bottom: 10rpx;
}
.item-check-status {
	width: 150rpx;
	font-size: 27rpx;
	margin-left: auto;
	font-weight: bold;

	.item-check-no {
		display: flex;
		align-items: center;
		justify-content: space-between;
		padding: 8rpx 15rpx;
		border-radius: 8rpx;
		background-color: #fff5ea;
		background-position: center;
		white-space: nowrap;
	}
	.item-check-yes {
		display: flex;
		align-items: center;
		justify-content: space-between;
		padding: 8rpx 15rpx;
		border-radius: 8rpx;
		background-color: #26bf4017;
		background-position: center;
		white-space: nowrap;
	}
}

.item-brch {
	width: 98rpx;
	font-size: 30rpx;
	color: #e06263;
	font-weight: bold;
}

.item-content {
	font-size: 28rpx;
	padding: 15rpx 10rpx 4rpx 10rpx;
	display: flex;
	.item-content-icon {
		font-size: 25rpx;
		padding: 4rpx 8rpx;
		border-radius: 8rpx;
		background-color: #fff5ea;
		color: #ff9a27;
		width: 28rpx;
		height: 37rpx;
		margin-right: 10rpx;
	}
	.item-content-list {
		padding: 6rpx 8rpx;
		.list-item {
			display: flex;
			margin-bottom: 6rpx;
			.item-name {
				color: #262626;
				margin-right: 20rpx;
			}
			.item-amount {
				color: #4088fe;
			}
			.item-freq {
				color: #262626;
				margin-left: 20rpx;
			}
		}
	}
}
.check-datetime {
	font-size: 25rpx;
	color: #909399;
	padding: 0rpx 12rpx 8rpx 12rpx;
}
</style>
